/*
 * @Author: Liu
 * @Date: 2023-05-11 17:56:32
 * @LastEditTime: 2023-06-26 16:54:23
 */
import CryptoJS from "crypto-js";
import $wx from 'weixin-js-sdk';
import vueCookies from 'vue-cookies';

const UNI_MINI = "uni_mini"
const UNI_APP = "uni_app"

export default {

  encrypt(data, key) {

    if (typeof data === "object") {
      try {
        // eslint-disable-next-line no-param-reassign
        data = JSON.stringify(data);
      } catch (error) {
        console.log("encrypt error:", error);
      }
    }
    key = CryptoJS.enc.Utf8.parse(key.padStart(16, '0'))
    console.log("key", key)
    const dataHex = CryptoJS.enc.Utf8.parse(data);
    const encrypted = CryptoJS.AES.encrypt(dataHex, key, {
      iv: key,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.ZeroPadding
    });
    return encrypted.toString();

    // return encrypted.ciphertext.toString();
  },
  decrypt(data, key) {
    const encryptedHexStr = CryptoJS.enc.Hex.parse(data);
    const str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    key = CryptoJS.enc.Utf8.parse(key.padStart(16, '0'))
    const decrypt = CryptoJS.AES.decrypt(str, key, {
      iv: key,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.ZeroPadding
    });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();

  },
  /**
   * 小程序分享 配置
   * @param {对象  包含title和imgUrl} data 
   */
  setUniAppShareData(data) {
    console.log($wx)
    $wx.miniProgram.postMessage({ data })
  },


  /**
   * APP的分享
   * {
          shareTitle: "智电双车，我懂UNI", // 分享标题
          shareUrl:"https://img.uni.changan.com.cn/download/index.html?channel=10280", // 分享链接
          shareImg:"https://changan-uni.cloud-top.com.cn/app/quickqa/fenxiang.jpg", // 分享icon
          shareDesc: "趣味答题互动，最高可赢3万U币", // 分享描述
          shareType: 3, // 1:好友, 2:朋友圈 3:好友和朋友圈
          isImg: "0", // 是否为分享纯图片（1 是 0 否）
          isMiniProgram: "0", // 是否分享微信小程序（可选）
        }
   */
  callAppShare(data, callback) {
    var data = {
      shareTitle: "U星大富翁 | 幸运投掷 掷出好礼", // 分享标题
      shareUrl:
        "https://head.uni.changan.com.cn/quanzi/#/zixunPreview?artId=2103", // 分享链接
      shareImg: "https://yinli-qixi-run.varwey.com/2023_ca/chess1025/share/app.jpg", // 分享icon
      shareDesc: "谁是欧气王？单次最高可抽10000U币！", // 分享描述
      shareType: 3, // 1:好友, 2:朋友圈 3:好友和朋友圈
      isImg: "0", // 是否为分享纯图片（1 是 0 否）
      isMiniProgram: "0", // 是否分享微信小程序（可选）
    };
    window.UNIApp.shareTo(JSON.stringify(data), callback);
  },

  /**
   * 
   * @returns   返回当前环境
   */
  getOperationEnvironment() {
    if (window?.UNIApp?.isInApp()) {
      return UNI_APP
    } else {
      return UNI_MINI
    }
  },

  /**
   * 检测环境
   * @returns {string|null}
   */
  checkENV() {
    let value;
    // 判断是不是APP
    if (typeof window?.UNIApp !== `undefined`) {
      value = `app`
    }
    // 判断是不是小程序
    else if (wx?.miniProgram) {
      wx?.miniProgram.getEnv(res => {
        if (res.miniprogram) value = `mini`;
      })
    }
    return value
  },


  /**
   * 
   * @param {* 属性名 } name 
   * @returns 获取当前页面url的参数
   */

  getUrlParameter(name) {
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    let r = window.location.search.substr(1).match(reg);
    if (r != null) {
      return r[2];
    }
    return null;
  },


  // 跳转到登录页面

  goAuth() {
    let e = this.getOperationEnvironment();

    if (e == UNI_APP) {
      window["UNIApp"]?.loginApp("logincallback");
    }
    if (e == UNI_MINI) {
      $wx?.miniProgram.navigateTo({
        url: "/pages/user/auth",
      })
    }
  },


  /**
   * 获取token 并缓存
   * 不存在则跳转到登录
   */

  getIsLogin() {
    return sessionStorage.getItem('isLogin')
  },

  setIsLogin() {
    return sessionStorage.setItem('isLogin', true)
  },

  getToken() {
    let e = this.getOperationEnvironment();
    let token;

    if (vueCookies.get("access_token_cookie")) {
      return vueCookies.get("access_token_cookie")
    } else {
      if (e == UNI_APP) {
        token = window.UNIApp.getToken();
      }
      if (e == UNI_MINI) {
        token = this.getUrlParameter("token")
      }
      if (token && token != '') {
        localStorage.setItem("token", token);
        return token
      }
    }

  },

  setUserInfo(extra) {
    return localStorage.setItem('extra', JSON.stringify(extra))
  },

  getUserInfo() {
    return localStorage.getItem('extra')
  },

  delUserInfo() {
    return localStorage.removeItem('extra')
  }
};
